package com.alibaba.druid.pool;

import org.elasticsearch.client.Client;

import java.sql.*;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Executor;

/**
 * Created by allwefantasy on 8/30/16.
 */
public class ElasticSearchConnection implements Connection {

    private final Client client;

    // 关闭标识
    private boolean closeStatus = true;

    public ElasticSearchConnection(Client client) {
        this.client = client;
        this.closeStatus = false;
    }

    public Client getClient() {
        return client;
    }


    @Override
    public PreparedStatement prepareStatement(String sql) throws SQLException {
        return new ElasticSearchPreparedStatement(sql);
    }

    @Override
    public CallableStatement prepareCall(String sql) throws SQLException {
        return null;
    }

    @Override
    public String nativeSQL(String sql) throws SQLException {
        return null;
    }

    @Override
    public void setAutoCommit(boolean autoCommit) throws SQLException {

    }

    @Override
    public boolean getAutoCommit() throws SQLException {
        return false;
    }

    @Override
    public void commit() throws SQLException {

    }

    @Override
    public void rollback() throws SQLException {

    }

    @Override
    public void close() throws SQLException {
        closeStatus = true;
    }

    @Override
    public boolean isClosed() throws SQLException {
        return closeStatus;
    }

    @Override
    public DatabaseMetaData getMetaData() throws SQLException {
        return null;
    }

    @Override
    public void setReadOnly(boolean readOnly) throws SQLException {

    }

    @Override
    public boolean isReadOnly() throws SQLException {
        return false;
    }

    @Override
    public void setCatalog(String catalog) throws SQLException {

    }

    @Override
    public String getCatalog() throws SQLException {
        return null;
    }

    @Override
    public void setTransactionIsolation(int level) throws SQLException {

    }

    @Override
    public int getTransactionIsolation() throws SQLException {
        return Connection.TRANSACTION_NONE;
    }

    @Override
    public SQLWarning getWarnings() throws SQLException {
        return null;
    }

    @Override
    public void clearWarnings() throws SQLException {

    }

    @Override
    public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
        return null;
    }

    /*
        @Override
        public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
            return null;
        }
    */

    @Override
    public Statement createStatement() throws SQLException {
        return new ElasticSearchStatement(this);
    }

/*@Override
public Statement createStatement() throws SQLException
{
    return new Statement()
    {
        public <T> T unwrap(Class<T> iface) throws SQLException
        {
            return null;
        }

        public boolean isWrapperFor(Class<?> iface) throws SQLException
        {
            return false;
        }

        public void setQueryTimeout(int seconds)
                throws SQLException
        {
        }

        public void setPoolable(boolean poolable)
                throws SQLException
        {
        }

        public void setMaxRows(int max)
                throws SQLException
        {
        }

        public void setMaxFieldSize(int max)
                throws SQLException
        {
        }

        public void setFetchSize(int rows)
                throws SQLException
        {
        }

        public void setFetchDirection(int direction)
                throws SQLException
        {
        }

        public void setEscapeProcessing(boolean enable)
                throws SQLException
        {
        }

        public void setCursorName(String name)
                throws SQLException
        {
        }

        public boolean isPoolable() throws SQLException
        {
            return false;
        }

        public boolean isClosed() throws SQLException
        {
            return false;
        }

        public boolean isCloseOnCompletion() throws SQLException
        {
            return false;
        }

        public SQLWarning getWarnings() throws SQLException
        {
            return null;
        }

        public int getUpdateCount() throws SQLException
        {
            return 0;
        }

        public int getResultSetType() throws SQLException
        {
            return 0;
        }

        public int getResultSetHoldability() throws SQLException
        {
            return 0;
        }

        public int getResultSetConcurrency() throws SQLException
        {
            return 0;
        }

        public ResultSet getResultSet() throws SQLException
        {
            return null;
        }

        public int getQueryTimeout() throws SQLException
        {
            return 0;
        }

        public boolean getMoreResults(int current) throws SQLException
        {
            return false;
        }

        public boolean getMoreResults() throws SQLException
        {
            return false;
        }

        public int getMaxRows() throws SQLException
        {
            return 0;
        }

        public int getMaxFieldSize() throws SQLException
        {
            return 0;
        }

        public ResultSet getGeneratedKeys() throws SQLException
        {
            return null;
        }

        public int getFetchSize() throws SQLException
        {
            return 0;
        }

        public int getFetchDirection() throws SQLException
        {
            return 0;
        }

        public Connection getConnection() throws SQLException
        {
            return null;
        }

        public int executeUpdate(String sql, String[] columnNames) throws SQLException
        {
            return 0;
        }

        public int executeUpdate(String sql, int[] columnIndexes) throws SQLException
        {
            return 0;
        }

        public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException
        {
            return 0;
        }

        public int executeUpdate(String sql) throws SQLException
        {
            return 0;
        }

        public ResultSet executeQuery(String sql) throws SQLException
        {
            return null;
        }

        public int[] executeBatch() throws SQLException
        {
            return null;
        }

        public boolean execute(String sql, String[] columnNames) throws SQLException
        {
            return false;
        }

        public boolean execute(String sql, int[] columnIndexes) throws SQLException
        {
            return false;
        }

        public boolean execute(String sql, int autoGeneratedKeys) throws SQLException
        {
            return false;
        }

        public boolean execute(String sql) throws SQLException
        {
            return false;
        }

        public void closeOnCompletion()
                throws SQLException
        {
        }

        public void close()
                throws SQLException
        {
        }

        public void clearWarnings()
                throws SQLException
        {
        }

        public void clearBatch()
                throws SQLException
        {
        }

        public void cancel()
                throws SQLException
        {
        }

        public void addBatch(String sql) throws SQLException
        {
        }
    };
}*/

    @Override
    public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
        return null;
    }

    @Override
    public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException {
        return null;
    }

    @Override
    public Map<String, Class<?>> getTypeMap() throws SQLException {
        return null;
    }

    @Override
    public void setTypeMap(Map<String, Class<?>> map) throws SQLException {

    }

    @Override
    public void setHoldability(int holdability) throws SQLException {

    }

    @Override
    public int getHoldability() throws SQLException {
        return 0;
    }

    @Override
    public Savepoint setSavepoint() throws SQLException {
        return null;
    }

    @Override
    public Savepoint setSavepoint(String name) throws SQLException {
        return null;
    }

    @Override
    public void rollback(Savepoint savepoint) throws SQLException {

    }

    @Override
    public void releaseSavepoint(Savepoint savepoint) throws SQLException {

    }

    @Override
    public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
        return null;
    }

    @Override
    public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
        return null;
    }

    @Override
    public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
        return null;
    }

    @Override
    public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
        return null;
    }

    @Override
    public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
        return null;
    }

    @Override
    public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
        return null;
    }

    @Override
    public Clob createClob() throws SQLException {
        return null;
    }

    @Override
    public Blob createBlob() throws SQLException {
        return null;
    }

    @Override
    public NClob createNClob() throws SQLException {
        return null;
    }

    @Override
    public SQLXML createSQLXML() throws SQLException {
        return null;
    }

    @Override
    public boolean isValid(int timeout) throws SQLException {
        return false;
    }

    @Override
    public void setClientInfo(String name, String value) throws SQLClientInfoException {

    }

    @Override
    public void setClientInfo(Properties properties) throws SQLClientInfoException {

    }

    @Override
    public String getClientInfo(String name) throws SQLException {
        return null;
    }

    @Override
    public Properties getClientInfo() throws SQLException {
        return null;
    }

    @Override
    public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
        return null;
    }

    @Override
    public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
        return null;
    }

    @Override
    public void setSchema(String schema) throws SQLException {

    }

    @Override
    public String getSchema() throws SQLException {
        return null;
    }

    @Override
    public void abort(Executor executor) throws SQLException {

    }

    @Override
    public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {

    }

    @Override
    public int getNetworkTimeout() throws SQLException {
        return 0;
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return null;
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return false;
    }
}
